package continuity;

/**
 * Az ajtó elemet valósítja meg. Nyilvántartja, hogy nyitva van-e az ajtó, azaz a karakter felszedte-e már az összes kulcsot.
 * @author FornetTeam
 */
public class DoorElement extends Element {
    /**
     * Hány darab kulcs nincs még felszedve
     */
    private int numberOfKeys;

    /**
     * A DoorElement konstruktora.
     * Itt allitjuk be hogy paylakezdeskor mennyi kulcs van.
     * @param game az interface amin keresztül kommunikálunk 
     * @param keyNumber ennyi kulcs van a pályán kezdéskor
     */
    public DoorElement(Communication game, int keyNumber){
        
        super(game);
        this.numberOfKeys = keyNumber;
 
    }
    
    /**
     * Az adott elem node-ján tartózkodhat-e a karakter. Ezen elem esetében ez mindig igaz.
     * @return true
     */
    @Override
    public boolean canIsHere() {

        return true;
    }

    /**
     * Ha már fel van szedve az összes kulcs, akkor vége a játéknak. A következő terület töltődik be. Ha még nincs meg az összes kulcs nem történik semmi.
     * Ha nincs felvéve minden kulcs és a DoorElement alatt nincs ObstacleEéement, és az alatt lévő Room nem kompatibilis vele akkor meg hal az adott karakter.
     */
    @Override
    public void doSomething() {
        
        if(numberOfKeys==0 &&
                parent.getIsHere(0) == true &&
                parent.getIsHere(1) == true){
        /**
         * Ha az összes kulcs fel
         * van véve, akkor a játékot
         * befejezzük.
         */
            game.disposeGame();
        } else if(parent.getNeighbor(Direction.Down.toInt()) == null){
            
            if(parent.getIsHere(0) == true)
                game.reloadCharacter(0);
            
            if(parent.getIsHere(1) == true)
                game.reloadCharacter(1);
        }
    }
    
    /**
     *  Csökkenti a hátralévő kulcsok számát.
     */
    public void keyFound(){

       /**
        * Ha egy valamelyik karakter felvett egy kulcsot
        */
        this.numberOfKeys--;

    }
    
    @Override
    public String toString() {
        if(numberOfKeys==0)
            return "do";
        else
            return "Do";
    }
    
}
